package org.example.clouddemo.service.common;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.example.clouddemo.bean.common.entity.User;
import com.baomidou.mybatisplus.extension.service.IService;
import org.example.clouddemo.bean.common.param.LoginParam;
import org.example.clouddemo.bean.common.param.RegisterParam;
import org.example.clouddemo.bean.common.param.UpdateUserInfoParam;
import org.example.clouddemo.bean.common.vo.LoginResultVo;
import org.example.clouddemo.bean.common.vo.UserAppVo;

/**
 * <p>
 * 用户表 服务类
 * </p>
 *
 * @author hzg
 * @since 2025-06-06
 */

public interface UserService extends IService<User> {
/*    IPage selectPageVo(Page<User> page, User user);

    User selectOne(User user);

    int create(User user);

    int update(User user);

    int delete(String id);

    *//**
     * @param param
     * @return 返回新增用户id
     *//*
    Long register(RegisterParam param);

    LoginResultVo login(LoginParam param);

    UserAppVo getInfo(Long userId);*/

    //--------------------------

    //IPage<User> selectPageVo(Page<User> page, User user);

    /**
     * 用户注册
     *
     * @param registerParam 注册参数
     */
    String register(RegisterParam registerParam);

    /**
     * 用户登录
     *
     * @param loginParam 登录参数
     * @return 包含Token的登录结果
     */
    LoginResultVo login(LoginParam loginParam);

    /**
     * 用户退出登录
     * @param token 从请求头中获取的JWT
     */
    void logout(String token);

    /**
     * 根据Token获取用户信息
     * @param token JWT
     * @return 用户实体信息
     */
    User getUserInfoByToken(String token);

    /**
     * 根据token更新用户信息
     * @param token 用户登录凭证
     * @param param 待更新的用户信息
     */
    void updateUserInfo(String token, UpdateUserInfoParam param);

    /**
     * 【新增】根据用户ID获取用户信息（用于返回给前端的视图对象）
     *
     * @param userId 用户ID
     * @return 用户信息视图对象
     */
    UserAppVo getInfo(Long userId);

}
